package com.zheng.redpacket.server.utils;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * 抢红包算法：二分均值法
 */
public class RedPacketUtil {
    /**
     *
     * @param totalAmount 红包总金额（单位：分）
     * @param totalPeople 参与活动总人数
     * @return
     */
    public static List<Integer> divideRedPacket(Integer totalAmount, Integer totalPeople) {
        //存储每次产生红包随机金额的列表
        List<Integer> amountList = new ArrayList<>();
        //判断参与人数和总金额是否合法
        if (totalAmount > 0 && totalPeople > 0) {
            //剩余总金额和剩余人数
            Integer restAmount = totalAmount;
            Integer restPeople = totalPeople;
            //产生随机数
            Random random = new Random();
            //循环产生随机金额，直到人数小于0
            for (int i = 0; i < totalPeople-1; i++) {
                //随机区间[1，剩余人均金额的两倍)，amount为产生的随机金额
                int amount = random.nextInt(restAmount / restPeople*2-1) + 1;
                //更新剩余金额
                restAmount -= amount;
                //更新剩余人数
                restPeople--;
                //产生的金额加入列表
                amountList.add(amount);
            }
            amountList.add(restAmount);
        }
        return amountList;
    }
}
